require(['lib/RequestAnimationFrame', 'lib/Three', 'jquery'], function() {
 
  var camera, scene, renderer;
  var dae;
 
  // Create an instance of the collada loader:
  var loader = new THREE.ColladaLoader();
 
  // Need to convert the axes so that our model does not stand upside-down:
  loader.options.convertUpAxis = true;
 
  // Load the 3D collada file (robot01.dae in my example), and specify
  // the callback function that is called once the model has loaded:
  loader.load( './models/Duck.dae', function ( collada ) {
 
    // Grab the collada scene data:
    dae = collada.scene;
 
    // No skin applied to my model so no need for the following:
    // var skin = collada.skins[ 0 ];
 
    // Scale-up the model so that we can see it:
    dae.scale.x = dae.scale.y = dae.scale.z = 25.0;
 
    // Initialise and then animate the 3D scene
    // since we have now successfully loaded the model:
    init();
    animate();
  });
 
  function init() {
 
    // Instantiate the 3D scene:
    scene = new THREE.Scene();
 
    // Instantiate an Orthographic camera this time.
    // The Left/Right/Top/Bottom values seem to be relative to the scene's 0, 0, 0 origin.
    // The best result seems to come if the overall viewable area is divided in 2 and
    // the Left & Bottom values set to negative
    camera = new THREE.OrthographicCamera(
      window.innerWidth / -2,   // Left
      window.innerWidth / 2,    // Right
      window.innerHeight / 2,   // Top
      window.innerHeight / -2,  // Bottom
      -2000,            // Near clipping plane
      1000 );           // Far clipping plane
 
    // Set the camera position so that it's up top and looking down:
    camera.position.y = 100;
 
    // Rotate around the x-axis by -45 degrees:
    camera.rotation.x -= 45 * (Math.PI/ 180);
 
    // Add the camera to the scene:
    scene.add(camera);
 
    // Add some lights to the scene
    var directionalLight = new THREE.DirectionalLight(0xeeeeee , 1.0);
    directionalLight.position.x = 1;
    directionalLight.position.y = 0;
    directionalLight.position.z = 0;
    scene.add( directionalLight );
 
    var directionalLight2 = new THREE.DirectionalLight(0xeeeeee, 2.0);
    // A different way to specify the position:
    directionalLight2.position.set(-1, 0, 1);
    scene.add( directionalLight2 );
 
    // Add the loaded model to the scene:
    scene.add(dae);
 
    // Instantiate the renderer
    renderer = new THREE.WebGLRenderer();
    // .. and set it's size:
    renderer.setSize(window.innerWidth, window.innerHeight);
 
    // Place the renderer into the HTML (inside the #container div):
    $('#container').append(renderer.domElement);
  }
 
  function animate() {
    // Defined in the RequestAnimationFrame.js file, this function
    // means that the animate function is called upon timeout:
    requestAnimationFrame( animate );
 
    render();
  }
 
  function render() {
    // *** Update the scene ***
    renderer.render(scene, camera);
  }
});